package com.genesis.web.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.genesis.mall.common.PmsProductCategoryPage;
import com.genesis.mall.common.Result;
import com.genesis.mall.dto.PmsProductCategoryDto;
import com.genesis.mall.dto.ProductCategoryDto;
import com.genesis.mall.entity.PmsProductCategory;
import com.genesis.mall.service.IPmsProductCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 商品分类 前端控制器
 * </p>
 *
 * @author author
 * @since 2022-08-01
 */
@RestController
@RequestMapping("/productCategory")
@Slf4j
public class PmsProductCategoryController {
    @Autowired
    private IPmsProductCategoryService iPmsProductCategoryService;

    /**
     * 添加商品的分类
     * @param pmsProductCategory
     * @return
     */
    @PostMapping("/create")
    public Result<String> sava(@RequestBody PmsProductCategory pmsProductCategory){
        log.info("添加商品分类");

        if(pmsProductCategory.getParentId() == 0){
            pmsProductCategory.setLevel(0);
        }
        if(pmsProductCategory.getParentId() == 1){
            pmsProductCategory.setLevel(1);
        }
        if(pmsProductCategory.getProductCount() == null){
            pmsProductCategory.setProductCount(0);
        }

        iPmsProductCategoryService.save(pmsProductCategory);

        return Result.success("添加商品分类成功");
    }

    /**
     * 分页查询
     * @return
     */
    @GetMapping("/list/{parentId}")
    public Result<PmsProductCategoryPage<PmsProductCategory>> getPage(@PathVariable int parentId, int pageNum, int pageSize){
        //分页构造器
        Page<PmsProductCategory> pageInfo = new Page<>(pageNum,pageSize);
        //条件构造器
        LambdaQueryWrapper<PmsProductCategory> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(PmsProductCategory::getParentId,parentId);
        iPmsProductCategoryService.page(pageInfo,queryWrapper);

        //创建对象
        PmsProductCategoryPage<PmsProductCategory> productCategoryPage = new PmsProductCategoryPage();
        BeanUtils.copyProperties(pageInfo,productCategoryPage);

        return Result.success(productCategoryPage);
    }

    @PostMapping("/update/{id}")
    public Result<String> update(@PathVariable int id,@RequestBody ProductCategoryDto productCategoryDto){
        log.info("根据id来修改商品的分类信息");


        return Result.success("修改成功");
    }

    /**
     * 根据id获取商品的分类
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result<PmsProductCategory> selectById(@PathVariable Long id){
        log.info("根据id获取商品的分类");
        PmsProductCategory pms = iPmsProductCategoryService.getById(id);
        return Result.success(pms);
    }

    @PostMapping("/delete/{id}")
    public Result<String> delete(@PathVariable int id){
        log.info("根据id删除商品分类");
        iPmsProductCategoryService.removeById(id);
        return Result.success("删除成功");

    }

    /**
     * 获取商品分类的parentId为0的以及下级分类
     * @return
     */
    @GetMapping("/list/withChildren")
    public Result<List<PmsProductCategoryDto>> getList(){
        //查询一级分类
        List<PmsProductCategoryDto> productDtoList = iPmsProductCategoryService.getAll1();
        //根据关联属性，查询二级分类
        for (PmsProductCategoryDto pmsProductCategoryDto : productDtoList) {
            LambdaQueryWrapper<PmsProductCategory> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(PmsProductCategory::getParentId,pmsProductCategoryDto.getId());
            List<PmsProductCategory> productAttributes = iPmsProductCategoryService.list(queryWrapper);
            //设置pmsProductCategoryDto中的List集合
            pmsProductCategoryDto.setChildren(productAttributes);
        }

        return Result.success(productDtoList);
    }


    /**
     * 修改是否导航栏
     * @param ids
     * @param navStatus
     * @return
     */
    @PostMapping("/update/navStatus")
    public Result<String> navStatus(int ids, int navStatus){
        log.info("根据ids来修改商品分类的导航栏");
        PmsProductCategory category = iPmsProductCategoryService.getById(ids);
        category.setNavStatus(navStatus);
        iPmsProductCategoryService.updateById(category);

        return Result.success("修改成功");
    }

    /**
     * 是否显示
     * @param ids
     * @param showStatus
     * @return
     */
    @PostMapping("/update/showStatus")
    public Result<String> showStatus(int ids,int showStatus){
        log.info("根据id来修改商品分类的显示状态");
        PmsProductCategory category = iPmsProductCategoryService.getById(ids);
        category.setShowStatus(showStatus);
        iPmsProductCategoryService.updateById(category);

        return Result.success("修改成功");
    }

}
